package com.luobr.backend.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.luobr.backend.api.aliyunai.model.CreateImageSynthesisTaskResponse;
import com.luobr.backend.model.dto.image.*;
import com.luobr.backend.model.entity.Image;
import com.baomidou.mybatisplus.extension.service.IService;
import com.luobr.backend.model.vo.image.ImageVO;
import com.luobr.backend.model.vo.user.UserLoginVO;

import java.util.List;

/**
 * @author 罗念笙
 * @description 针对表【image(图片)】的数据库操作Service
 * @createDate 2025-02-25 16:01:18
 */
public interface ImageService extends IService<Image> {

    /**
     * 上传图片
     *
     * @param inputSource        输入源
     * @param imageUploadRequest 上传的图片信息
     * @param loginUser          登录用户
     * @return
     */
    ImageVO uploadImage(Object inputSource, ImageUploadRequest imageUploadRequest, UserLoginVO loginUser);

    /**
     * 批量上传图片
     * @param imageUploadByBatchRequest 批量上传请求参数
     * @param loginUser 登录用户
     * @return 成功上传图片数量
     */
    int uploadImageByBatch(ImageUploadByBatchRequest imageUploadByBatchRequest, UserLoginVO loginUser);

    /**
     * 删除图片
     *
     * @param id 图片 id
     * @param loginUser 用户信息
     */
    void deleteImage(long id, UserLoginVO loginUser);

    /**
     * 编辑图片（仅限本人管理员权限）
     *
     * @param imageEditRequest 编辑图片请求参数
     * @param loginUser 用户信息
     */
    void editImage(ImageEditRequest imageEditRequest, UserLoginVO loginUser);

    /**
     * 分页查询图片数据
     *
     * @param imageQueryRequest 查询图片请求类
     * @param loginUser 登录用户信息
     * @return 分页图片数据
     */
    Page<ImageVO> getImageVOPage(ImageQueryRequest imageQueryRequest,UserLoginVO loginUser);

    /**
     * 分页查询图片数据（含有缓存）
     *
     * @param imageQueryRequest 查询图片请求类
     * @return
     */
    Page<ImageVO> getImageVOPageHasCache(ImageQueryRequest imageQueryRequest);

    /**
     * 创建图片合成任务（当前主要完成图片扩图）
     *
     * @param createImageTaskRequest 请求类
     * @param loginUser 登录用户
     * @return
     */
    CreateImageSynthesisTaskResponse createImageSynthesisTask(CreateImageTaskRequest createImageTaskRequest,UserLoginVO loginUser);

    /**
     * 通过主色调对图片进行排序
     *
     * @param imageList 图片列表
     * @param targetHexColor 目标主色调
     * @return 排序后的主色调列表（越相似的越排在前面）
     */
    List<ImageVO> orderImageByColor(List<ImageVO> imageList, String targetHexColor);

    /**
     * 将查询请求参数转换成查询 QueryWrapper 对象
     *
     * @param imageQueryRequest 查询请求参数
     * @return QueryWrapper 对象 （拼接查询条件）
     */
    QueryWrapper<Image> getQueryWrapper(ImageQueryRequest imageQueryRequest);

    /**
     * 校验图片信息（更新图片的时候）
     *
     * @param image 图片信息
     */
    void validImage(Image image);

    /**
     * 图片审核
     *
     * @param imageReviewRequest 审核信息包装类
     * @param loginUser          登录用户
     */
    void reviewImage(ImageReviewRequest imageReviewRequest, UserLoginVO loginUser);

    /**
     * 过滤审核图片（管理员上传的自动审核通过，普通用户上传的图片为未审核状态）
     *
     * @param image     图片信息
     * @param loginUser 登录用户
     */
    void filterReviewImage(Image image, UserLoginVO loginUser);

    /**
     * 校验图片权限以及空间权限
     *
     * @param loginUser 登录用户
     * @param image 图片信息
     */
    void checkImageAndSpaceAuth(UserLoginVO loginUser, Image image);
}